//私聊消息仓库
import {
	defineStore
} from "pinia"


// 消息对象类
class Message {
	constructor(sendBody) {
		this.room = sendBody.room;
		this.sendID = sendBody.sendID;
		this.receiveID = sendBody.receiveID;
		this.message = sendBody.message;
		this.sendType = sendBody.sendType;
		// 发送次数
		this.sendNum = 0;
		// 发送状态
		this.sendStatus = "no";
		// 发送时间(记录时间)
		this.time = [];
		this.time.push(new Date())
	}
	send(Socket) {
		this.sendNum++;
		Socket.emit(this.sendType, {
			sendID: this.sendID,
			receiveID: this.receiveID,
			message: this.message,
			room: this.room,
			sendType: this.sendType,
		}, (response) => {
			this.sendStatus = response.status;
		});
	}
	saveMessgae(arr) {
		arr.push(this);
	}
	getTime() {
		return this.time.at(-1).toLocaleDateString('en-GB') + "\t" + this.time.at(-1)
			.toLocaleTimeString('it-IT');
	}
	getStatus() {
		let Status = this.sendStatus == 'ok' ? true : false;
		if (Status) {
			return `<b style="color:${connectState.color[1]}">已发送</b>`;
		} else {
			return `<b style="color:${connectState.color[3]}">未发送</b>`;
		}
	}
}



// 声明一个叫做user的库
let usepcChat = defineStore("pcChat", {
	state: () => {
		return {
			// 保存聊天列表
			// 使用映射类型处理 map类型
			chatMessageList: new Map([
				// 模拟的数据类型
				["66ce74dd48e3a3cdc81e5779", {
					messageList: [
						new Message({
							sendID: "66ce74dd48e3a3cdc81e5779",
							receiveID: "66c367bd0e4d972cf4b77583",
							message: "你好111111111111111111111111111111111111111111111111111111",
							room: "admin2",
							sendType: "PC"
						}),
						new Message({
							sendID: "66c367bd0e4d972cf4b77583",
							receiveID: "66ce74dd48e3a3cdc81e5779",
							message: "你好呀！你是谁？",
							room: "admin2",
							sendType: "PC"
						})
					]
				}]
			])
		}
	},
	getters: {
		// 获取所有的聊天信息的方法
	},
	actions: {
		// 根据用户id，添加或者新建聊天数据的方法
		addMessage(name, messageObj) {
			let chat = this.chatMessageList.get(name);
			if (!chat) {
				chat = {
					messageList: []
				};
				this.chatMessageList.set(name, chat);
			}
			let messageCase = new Message(messageObj);

			chat.messageList.push(messageCase);

			return messageCase;
		},
		// 根据roomId，创建一个新的空聊天室对象    
		createNewChatRoom(Id) {
			// 检查chatMessageList中是否已存在该roomId的聊天室    
			if (!this.chatMessageList.has(Id)) {
				// 如果不存在，则创建一个新的聊天室对象，并添加到chatMessageList中    
				this.chatMessageList.set(Id, {
					messageList: []
				});
			}
			// 注意：此方法没有返回值，因为它直接修改了store的状态    
		},
		// 获取指定Id的所有聊天信息  
		getChatMessages(Id) {
			// 从chatMessageList中获取与Id对应的聊天室  
			const chatObj = this.chatMessageList.get(Id);
			// 如果聊天室存在，则返回其messageList，否则返回一个空数组  
			return chatObj ? chatObj.messageList : [];
		},
		// 获取指定Id的最后一个聊天信息  
		getLastMessages(Id, name) {
			// 从chatMessageList中获取与Id对应的聊天室  
			const chatObj = this.chatMessageList.get(Id);
			if (chatObj) {
				let showText = "";

				if (chatObj.sendID == Id) {
					showText = `${name}:${chatObj.messageList[chatObj.messageList.length - 1].message}`
				} else {
					showText = `你:${chatObj.messageList[chatObj.messageList.length - 1].message}`
				}

				return showText;
			} else {
				return null;
			}
		},
		// 消息工厂模式
		messageFactory(sendBody) {
			return new Message(sendBody);
		},
	}
})


// 默认导出仓库对象
export default usepcChat;